const express = require("express");
const app = express();
const router  = require('./src/api/router')
/*为app添加中间件处理跨域请求*/
app.use(function(req, res, next) {
  res.setHeader("Access-Control-Allow-Origin", "*");
  res.setHeader('Access-Control-Allow-Methods', 'PUT, GET, POST, DELETE, OPTIONS');
  // res.header("Access-Control-Allow-Headers", "X-Requested-With");
  // res.header('Access-Control-Allow-Headers', 'Content-Type');
  // res.header('Access-Control-Allow-Headers', 'Authorization');
   res.setHeader('Access-Control-Allow-Headers', 'Content-Type,XFILENAME,XFILECATEGORY,XFILESIZE,Authorization');
  next();
   
});
 
 
//设置request的解释方式
app.use(express.json());
// 2.导入将客户端发送过来的 JWT 字符串，解析还原成 JSON 对象的包
var { expressjwt: expressJWT} = require("express-jwt");
//4.3步骤
const baseConfig = require("./src/utils/baseConfig.js"); 
//expressJWT 高版本写法 注意 unless正则不要加引号
app.use(
    expressJWT({ secret: baseConfig.secretKey, algorithms: ["HS256"] }).unless({ path: [                // 不校验token的路由
    '/api/admin/loginin',
     /^\/uploads\// ,  /^\/api\/pc\//
] })
  );
 
//把路由挂载到app中
app.use(router)

//错误中间件放最后
app.use((err, req, res, next) => {
    // 如果错误是由token解析失败导致的
    if (err.name === 'UnauthorizedError') {
      return res.send({
        code: err.status,
        msg: err.inner.message
   
      })
    }
    console.log(err)
    // 如果是其他位置原因导致的错误
    res.send({
      code: err.status,
      msg: err
    })
    next()
})
  
//配置图片访问路径
app.use(express.static('src/assets'));
// 监听3300端口
app.listen(3300, () => {
    console.log('服务器运行在http://127.0.0.1:3300');
})